java将数据库数据转换成word文档并且生成pdf文件

目的:将数据转换成word图片的方式展现给用户

工具:openoffice +java代码 +数据库,其中openoffice有windows版本的和Linux版本的。

其中openoffice的下载地址为:链接:https://pan.baidu.com/s/1Y5Ra3TfNCcvVX1bF-29hjw 密码:44ms

openoffice的安装及启动不在描述:网上自行百度。

下面主要是目的实现的步骤。

第一步:创建openoffice的连接池,使用linkedlist实现。简单的连接池,避免过多的消耗资源!

 <!--word转pdf以及pdf转图片使用的jar-->
        <dependency>
            <groupId>wisemax</groupId>
            <artifactId>jodconverter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>ridl</artifactId>
            <version>3.2.1</version>
        </dependency>
 
        <dependency>
            <groupId>xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.1.3</version>
        </dependency>
 
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
 
 
        <dependency>
            <groupId>com.artofsolving</groupId>
            <artifactId>jodconverter</artifactId>
            <version>2.2.1</version>
        </dependency>
 
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>jurt</artifactId>
            <version>3.0.1</version>
        </dependency>
 
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>juh</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>slf4j-jdk14</artifactId>-->
            <!--<version>1.5.6</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.icepdf</groupId>
            <artifactId>icepdf-core</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>unoil</artifactId>
            <version>3.2.1</version>
        </dependency>

第二步:将数据转换成对应的模板信息。我利用的是github上的开源项目Word模板引擎 https://github.com/Sayi/poi-tl

具体的步骤和生成文档的方法,里面有很详细的介绍。

第三步:生成数据到word文档

①:准备一个如上图所示的模板或者自己定义一个模板,将需要动态生成的数据用{{xx}}进行占位。
如上代码便是将数据生成word的方法。输出路径为

其中map中put的key 是模板中的占位符变量。value是对应的值。

第四步:将word转换成pdf,此时要用到了openoffice工具。检查工具是否开启。
第五步:将pdf转成图片,图片的格式可以是png 或者jpg,图片的名字自定义。并且将下载的url返回

提醒建议:
一:openoffice的安装,网上百度都有,很简单的,仔细阅读github上的开源项目。
二:生成word的模板是自己定义的,文字的位置加粗斜体下划线等由POI-tl提供,类似于freemaker。但是我觉得比freemaker好用些。
三:生成的word是一页,但是pdf可能是两页,最后转换图片是根据pdf的页数进行转换的,反正最后都是会转换的。
四:最后生成的图片url可以根据自身的需求进行修改。
五:jar包可能缺乏,博主的jar是刚好的,如果有冲突或者缺少,大家可以搜一下资料进行修改。

参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache POI提供了许多类和方法用于将数据库数据生成文件。以下是一些基本步骤: 1. 创建工作簿(Workbook)对象。根据文件格式的不同,可以创建HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook等不同类型的工作簿。 2. 创建工作表(Sheet)对象。可以使用工作簿对象的createSheet()方法创建一个新的工作表。 3. 创建行(Row)对象。可以使用工作表对象的createRow()方法创建一个新的行。 4. 创建单元格(Cell)对象。可以使用行对象的createCell()方法创建一个新的单元格。 5. 从数据库中读取数据,并将数据填充到单元格中。可以使用JDBC API执行数据库查询,然后将查询结果填充到单元格对象中。 6. 保存工作簿。可以使用工作簿对象的write()方法将数据写入到文件中。 下面是一个简单的示例代码,用于将MySQL数据库中的数据导出为Excel文件: ```java import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class DatabaseToExcel { public static void main(String[] args) throws Exception { // 创建工作簿对象 Workbook workbook = new HSSFWorkbook(); // 创建工作表对象 Sheet sheet = workbook.createSheet("Sheet1"); // 连接数据库 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); // 读取数据并填充到单元格中 int rownum = 0; while (rs.next()) { // 创建新行 Row row = sheet.createRow(rownum++); // 填充单元格 Cell cell1 = row.createCell(0); cell1.setCellValue(rs.getString("column1")); Cell cell2 = row.createCell(1); cell2.setCellValue(rs.getString("column2")); Cell cell3 = row.createCell(2); cell3.setCellValue(rs.getString("column3")); } // 关闭数据库连接 rs.close(); stmt.close(); conn.close(); // 保存工作簿 FileOutputStream out = new FileOutputStream("output.xls"); workbook.write(out); out.close(); workbook.close(); } } ``` 在这个示例代码中,我们首先创建了一个HSSFWorkbook对象,然后创建了一个名为"Sheet1"的工作表。接下来,我们使用JDBC API连接到MySQL数据库并执行查询。在循环中,我们创建了新的行对象,并使用ResultSet中的数据填充了单元格对象。最后,我们将工作簿写入文件并关闭对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值